//给你一个字符串 s，找到 s 中最长的回文子串。 
//
// 如果字符串的反序与原始字符串相同，则该字符串称为回文字符串。 
//
// 
//
// 示例 1： 
//
// 
//输入：s = "babad"
//输出："bab"
//解释："aba" 同样是符合题意的答案。
// 
//
// 示例 2： 
//
// 
//输入：s = "cbbd"
//输出："bb"
// 
//
// 
//
// 提示： 
//
// 
// 1 <= s.length <= 1000 
// s 仅由数字和英文字母组成 
// 
//
// Related Topics 字符串 动态规划 👍 6478 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String longestPalindrome(String s) {
        int n=s.length();
        boolean[][] dp =new boolean[n][n];
        int max=1;
        int begin=0;
        for (int i = 0; i < n; i++) {
            dp[i][i]=true;
        }
        for (int i = 1; i < s.length(); i++) {
            for (int j = 0; j <i ; j++) {
                if(s.charAt(i)!=s.charAt(j)){
                    dp[j][i]=false;
                }else{
                    if(i-j<3){
                        dp[j][i]=true;
                    }else{
                        dp[j][i]=dp[j+1][i-1];
                    }
                }
                if(dp[j][i]==true&&i-j+1>max){
                    max=i-j+1;
                    begin=j;
                }
            }
        }
        return s.substring(begin,begin+max);
    }

}
//leetcode submit region end(Prohibit modification and deletion)
